﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace TD.bom
{
    /// <summary>
    /// Compte à rebours...
    /// </summary>
    public class CountDown
    {
        #region Propriétés

        protected uint m_timeout; // Temps en ms à partir du quel part le compte à rebours
        protected uint m_lastTick; // Nombre de "tick" à la dernière mise à jour
        protected uint m_currentCount; // Temps depuis le démarrage du compte à rebours
        
        /// <summary>
        /// Temps en ms à partir du quel part le compte à rebours
        /// </summary>
        public uint Timeout
        {
            get
            {
                return m_timeout;
            }
            set
            {
                m_timeout = value;
            }
        }

        #endregion

        /// <summary>
        /// Construit la compte à rebours en partant du nombre de ms spécifié
        /// </summary>
        /// <param name="p_timeout">NB ms avant expiration du compte à rebour</param>
        public CountDown(uint p_timeout)
        {
            Trigger(p_timeout);
        }

        /// <summary>
        /// Déclenche le compte à rebours en partant du nombre de ms spécifié
        /// </summary>
        /// <param name="p_timeout"></param>
        public void Trigger(uint p_timeout)
        {
            m_timeout = p_timeout;
            m_currentCount = 0;
            m_lastTick = Game.Instance.Clock.Time;
        }

        /// <summary>
        /// Indique si le compte à rebours a expiré
        /// </summary>
        public bool HasExpired
        {
            get
            {
                UpdateCount();
                return m_currentCount > m_timeout;
            }
        }

        /// <summary>
        /// Met à jour le comptage
        /// </summary>
        protected void UpdateCount()
        {
            uint l_thisTick = Game.Instance.Clock.Time;
            m_currentCount += l_thisTick - m_lastTick;
            m_lastTick = l_thisTick;
        }
    }
}
